package com.pro.common.api.enums;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.pro.common.api.enums.init.EnumCountry;
import com.pro.framework.api.enums.IEnumStr;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Schema(description = "物流渠道（仅美国站点）")
@Getter
@AllArgsConstructor
public enum EnumLogisticsCompany implements IEnumStr {

    _4PX("4PX", Collections.singletonList(EnumCountry.USA)),
    _99MINUTOS("99minutos", Collections.singletonList(EnumCountry.USA)),
    ABF_FREIGHT("ABF -freight", Collections.singletonList(EnumCountry.USA)),
    ACI_EXPRESS("ACI EXPRESS", Collections.singletonList(EnumCountry.USA)),
    ALLIED_EXPRESS("Allied Express Transport", Collections.singletonList(EnumCountry.USA)),
    AMAZON_LOGISTIC("Amazon Logistic", Collections.singletonList(EnumCountry.USA)),
    AMAZON_SHIPPING("Amazon Shipping", Collections.singletonList(EnumCountry.USA)),
    AMBROEXPRESS("ambroexpress", Collections.singletonList(EnumCountry.USA)),
    AMPM("AMPM", Collections.singletonList(EnumCountry.USA)),
    AQUILINE("aquiline", Collections.singletonList(EnumCountry.USA)),
    ARAMEX("Aramex", Collections.singletonList(EnumCountry.USA)),
    ASENDIA("Asendia", Collections.singletonList(EnumCountry.USA)),
    AXLEHIRE("AXLEHIRE", Collections.singletonList(EnumCountry.USA)),
    BETTERTRUCKS("Bettertrucks", Collections.singletonList(EnumCountry.USA)),
    BIG("BIG", Collections.singletonList(EnumCountry.USA)),
    BOXC("boxc", Collections.singletonList(EnumCountry.USA)),
    BRING("Bring", Collections.singletonList(EnumCountry.USA)),
    BRT("BRT", Collections.singletonList(EnumCountry.USA)),
    CAINIAO("Cainiao", Collections.singletonList(EnumCountry.USA)),
    CDL("CDL", Collections.singletonList(EnumCountry.USA)),
    CELERITAS("Celeritas", Collections.singletonList(EnumCountry.USA)),
    CEVA("CEVA", Collections.singletonList(EnumCountry.USA)),
    CHINA_POST("China Post", Collections.singletonList(EnumCountry.USA)),
    CHUKOU1("chukou1", Collections.singletonList(EnumCountry.USA)),
    CIRRO_PARCEL("cirro parcel", Collections.singletonList(EnumCountry.USA)),
    CJPACKET("CJPacket", Collections.singletonList(EnumCountry.USA)),
    CLOSER_LOGISTICS("Closer Logistics", Collections.singletonList(EnumCountry.USA)),
    CODEXPRESS("CODExpress", Collections.singletonList(EnumCountry.USA)),
    COLICOLI("Colicoli", Collections.singletonList(EnumCountry.USA)),
    COLIS_PRIVE("Colis Prive", Collections.singletonList(EnumCountry.USA)),
    COLISSIMO("Colissimo", Collections.singletonList(EnumCountry.USA)),
    CORREOS_EXPRESS("Correos Express", Collections.singletonList(EnumCountry.USA)),
    COURIERS_PLEASE("Couriers Please", Collections.singletonList(EnumCountry.USA)),
    CPC("CPC", Collections.singletonList(EnumCountry.USA)),
    CTT("CTT", Collections.singletonList(EnumCountry.USA)),
    DAYLIGHT_TRANSPORT("Daylight Transport", Collections.singletonList(EnumCountry.USA)),
    DB_SCHEINKER("DB Schenker", Collections.singletonList(EnumCountry.USA)),
    DEALERSEND("Dealersend", Collections.singletonList(EnumCountry.USA)),
    DELIVER_IT("deliver-it", Collections.singletonList(EnumCountry.USA)),
    DELIVER_DIRECT("DeliverDirect", Collections.singletonList(EnumCountry.USA)),
    DHL("DHL", Collections.singletonList(EnumCountry.USA)),
    DHL_ECOMMERCE("DHL ecommerce", Collections.singletonList(EnumCountry.USA)),
    DHL_EXPRESS("DHL Express", Collections.singletonList(EnumCountry.USA)),
    DHL_FREIGHT("DHL FREIGHT", Collections.singletonList(EnumCountry.USA)),
    DHL_INTERNATIONAL("DHL International GmbH", Collections.singletonList(EnumCountry.USA)),
    DIRECT_FREIGHT_EXPRESS("Direct Freight Express", Collections.singletonList(EnumCountry.USA)),
    DRAGONFLY("DRAGONFLY", Collections.singletonList(EnumCountry.USA)),
    DX_DELIVERY("DX Delivery", Collections.singletonList(EnumCountry.USA)),
    ECHO("Echo", Collections.singletonList(EnumCountry.USA)),
    ECMS("ECMS international logistics", Collections.singletonList(EnumCountry.USA)),
    ECOSCOOTING("Ecoscooting", Collections.singletonList(EnumCountry.USA)),
    ENVIALIA("Envialia", Collections.singletonList(EnumCountry.USA)),
    ESTAFETA("Estafeta", Collections.singletonList(EnumCountry.USA)),
    ESTES("Estes", Collections.singletonList(EnumCountry.USA)),
    EVRI("Evri", Collections.singletonList(EnumCountry.USA)),
    FEDEX("FedEx", Collections.singletonList(EnumCountry.USA)),
    FEDEX_CROSS_BORDER("Fedex Cross-Border", Collections.singletonList(EnumCountry.USA)),
    FURDECO("Furdeco", Collections.singletonList(EnumCountry.USA)),
    GEL_EXPRESS("GEL express", Collections.singletonList(EnumCountry.USA)),
    GEODIS("Geodis", Collections.singletonList(EnumCountry.USA)),
    GLOBALTRANS("GLOBALTRANS", Collections.singletonList(EnumCountry.USA)),
    GLS("GLS", Collections.singletonList(EnumCountry.USA)),
    GOBOLT("gobolt", Collections.singletonList(EnumCountry.USA)),
    GOFO("GOFO", Collections.singletonList(EnumCountry.USA)),
    GRUPO_CASTORES("Grupo Castores", Collections.singletonList(EnumCountry.USA)),
    HELLMANN("Hellmann", Collections.singletonList(EnumCountry.USA)),
    HERMES_UK("Hermes UK(Evri)", Collections.singletonList(EnumCountry.USA)),
    HUNTER_EXPRESS("Hunter Express", Collections.singletonList(EnumCountry.USA)),
    IB("IB", Collections.singletonList(EnumCountry.USA)),
    IMILE("imile", Collections.singletonList(EnumCountry.USA)),
    INPOST("INPOST", Collections.singletonList(EnumCountry.USA)),
    J_T("J&T", Collections.singletonList(EnumCountry.USA)),
    JCEX("JCEX", Collections.singletonList(EnumCountry.USA)),
    JERSEY_POST("Jersey Post", Collections.singletonList(EnumCountry.USA)),
    JITSU("jitsu", Collections.singletonList(EnumCountry.USA)),
    JS("JS", Collections.singletonList(EnumCountry.USA)),
    KOREA_POST("korea post", Collections.singletonList(EnumCountry.USA)),
    LA_POSTE("La Poste", Collections.singletonList(EnumCountry.USA)),
    LANDMARK_GLOBAL("Landmark Global", Collections.singletonList(EnumCountry.USA)),
    LASERSHIP("LASERSHIP", Collections.singletonList(EnumCountry.USA)),
    LSO("LSO", Collections.singletonList(EnumCountry.USA)),
    METROPOLITAN("Metropolitan", Collections.singletonList(EnumCountry.USA)),
    MEXICO_REDPACK("Mexico Redpack", Collections.singletonList(EnumCountry.USA)),
    MRW("MRW", Collections.singletonList(EnumCountry.USA)),
    NACEX("Nacex", Collections.singletonList(EnumCountry.USA)),
    ON_TIME("ON Time", Collections.singletonList(EnumCountry.USA)),
    ONTRAC("ONTRAC", Collections.singletonList(EnumCountry.USA)),
    OTHER_MCF("Other MCF", Collections.singletonList(EnumCountry.USA)),
    PACKS("Packs", Collections.singletonList(EnumCountry.USA)),
    PANDION("pandion", Collections.singletonList(EnumCountry.USA)),
    PAQUETEXPRESS("Paquetexpress", Collections.singletonList(EnumCountry.USA)),
    PARCEL_FREIGHT_LOGISTICS("Parcel Freight Logistics", Collections.singletonList(EnumCountry.USA)),
    PDN_EXPRESS("PDN Express", Collections.singletonList(EnumCountry.USA)),
    PIGGYSHIP("PiggyShip", Collections.singletonList(EnumCountry.USA)),
    PILOT("Pilot", Collections.singletonList(EnumCountry.USA)),
    POLAND_POST("Poland Post", Collections.singletonList(EnumCountry.USA)),
    POSTE_ITALIANE("Poste Italiane", Collections.singletonList(EnumCountry.USA)),
    POSTNL("PostNL", Collections.singletonList(EnumCountry.USA)),
    QTRACK("Qtrack", Collections.singletonList(EnumCountry.USA)),
    QUANTIUM("quantium", Collections.singletonList(EnumCountry.USA)),
    REDUR_SPAIN("Redur Spain", Collections.singletonList(EnumCountry.USA)),
    RHENUS("RHENUS", Collections.singletonList(EnumCountry.USA)),
    RL_CARRIERS("rl-carriers", Collections.singletonList(EnumCountry.USA)),
    ROADRUNNER("Roadrunner", Collections.singletonList(EnumCountry.USA)),
    ROYAL_MAIL("Royal Mail", Collections.singletonList(EnumCountry.USA)),
    S_F_EXPRESS("S.F. Express", Collections.singletonList(EnumCountry.USA)),
    SAGAWA("Sagawa", Collections.singletonList(EnumCountry.USA)),
    SDA("SDA", Collections.singletonList(EnumCountry.USA)),
    SEINO("Seino", Collections.singletonList(EnumCountry.USA)),
    SEKO_LOGISTICS("seko logistics", Collections.singletonList(EnumCountry.USA)),
    SENDEX("Sendex", Collections.singletonList(EnumCountry.USA)),
    SENDING("Sending", Collections.singletonList(EnumCountry.USA)),
    SENDLE("Sendle", Collections.singletonList(EnumCountry.USA)),
    SEUR("SEUR", Collections.singletonList(EnumCountry.USA)),
    SF_INTERNATIONAL("SF International", Collections.singletonList(EnumCountry.USA)),
    SF_EXPRESS("SF-Express", Collections.singletonList(EnumCountry.USA)),
    SFC("SFC", Collections.singletonList(EnumCountry.USA)),
    SHIPTER("SHIPTER", Collections.singletonList(EnumCountry.USA)),
    SOUTHEASTERN_FREIGHT("Southeastern Freight Lines", Collections.singletonList(EnumCountry.USA)),
    SPEEDEE("speedee", Collections.singletonList(EnumCountry.USA)),
    SPEEDX("Speedx", Collections.singletonList(EnumCountry.USA)),
    SPRING_GDS("Spring GDS", Collections.singletonList(EnumCountry.USA)),
    SWAY("SWAY", Collections.singletonList(EnumCountry.USA)),
    TDG("TDG", Collections.singletonList(EnumCountry.USA)),
    TEST_US_NO_CATEGORY("Test Us NoCategory", Collections.singletonList(EnumCountry.USA)),
    TFORCE("TForce", Collections.singletonList(EnumCountry.USA)),
    TGE_TEAM_GLOBAL_EXPRESS("TGE-Team Global Express", Collections.singletonList(EnumCountry.USA)),
    TIPSA("Tipsa", Collections.singletonList(EnumCountry.USA)),
    TNT("TNT", Collections.singletonList(EnumCountry.USA)),
    TOLL("Toll", Collections.singletonList(EnumCountry.USA)),
    UBI("UBI", Collections.singletonList(EnumCountry.USA)),
    UDS("UDS", Collections.singletonList(EnumCountry.USA)),
    UNI("Uni", Collections.singletonList(EnumCountry.USA)),
    UPS("UPS", Collections.singletonList(EnumCountry.USA)),
    UPS_MI("UPS-MI", Collections.singletonList(EnumCountry.USA)),
    URVAAM("Urvaam", Collections.singletonList(EnumCountry.USA)),
    USPS("USPS", Collections.singletonList(EnumCountry.USA)),
    WESTERNPOST("westernpost", Collections.singletonList(EnumCountry.USA)),
    WOOLINK("Wooolink", Collections.singletonList(EnumCountry.USA)),
    XDP_EXPRESS("XDP Express", Collections.singletonList(EnumCountry.USA)),
    XPO_LOGISTICS("XPO Logistics", Collections.singletonList(EnumCountry.USA)),
    YAMATO("Yamato", Collections.singletonList(EnumCountry.USA)),
    YANWEN("Yanwen", Collections.singletonList(EnumCountry.USA)),
    YANWEN_EXPRESS("Yanwen Express", Collections.singletonList(EnumCountry.USA)),
    YODEL("Yodel", Collections.singletonList(EnumCountry.USA)),
    YUN_EXPRESS("Yunexpress", Collections.singletonList(EnumCountry.USA)),
    ZELERIS("Zeleris", Collections.singletonList(EnumCountry.USA)),
    NIPPON_EXPRESS("日本通运Nippon", Collections.singletonList(EnumCountry.USA)),
    A_DUIE_PYLE("A. Duie Pyle", Collections.singletonList(EnumCountry.USA)),
    AAA_COOPER("AAA Cooper Transportation", Collections.singletonList(EnumCountry.USA)),
    ABF_FREIGHT_US("ABF Freight", Collections.singletonList(EnumCountry.USA)),
    AMAZON_SHIPPING_MCF("Amazon Shipping + Amazon MCF", Collections.singletonList(EnumCountry.USA)),
    ARCBEST("ArcBest", Collections.singletonList(EnumCountry.USA)),
    AVERITT_EXPRESS("Averitt Express", Collections.singletonList(EnumCountry.USA)),
    BEST_OVERNITE_EXPRESS("Best Overnite Express", Collections.singletonList(EnumCountry.USA)),
    BETTER_TRUCKS("Better trucks", Collections.singletonList(EnumCountry.USA)),
    CENTRAL_TRANSPORT("Central Transport", Collections.singletonList(EnumCountry.USA)),
    CIRRO("CIRRO", Collections.singletonList(EnumCountry.USA)),
    CNE("CNE", Collections.singletonList(EnumCountry.USA)),
    CROSS_COUNTRY_FREIGHT("CrossCountry Freight", Collections.singletonList(EnumCountry.USA)),
    CUSTOM_COMPANIES("Custom Companies", Collections.singletonList(EnumCountry.USA)),
    DAYTON_FREIGHT("Dayton Freight", Collections.singletonList(EnumCountry.USA)),
    DC_LOGISTICS("DC Logistics", Collections.singletonList(EnumCountry.USA)),
    DEDICATED_DELIVERY("Dedicated Delivery Professionals", Collections.singletonList(EnumCountry.USA)),
    DEPENDABLE_HIGHWAY("Dependable Highway Express", Collections.singletonList(EnumCountry.USA)),
    DEWELL("DeWell", Collections.singletonList(EnumCountry.USA)),
    DIAMOND_LINE("Diamond Line Delivery", Collections.singletonList(EnumCountry.USA)),
    DIRECT_XPRESS("Direct Xpress", Collections.singletonList(EnumCountry.USA)),
    DOORDASH("DOORDASH", Collections.singletonList(EnumCountry.USA)),
    EASY("EASY", Collections.singletonList(EnumCountry.USA)),
    ECHO_GLOBAL("Echo Global Logistics", Collections.singletonList(EnumCountry.USA)),
    EDI_EXPRESS("EDI Express", Collections.singletonList(EnumCountry.USA)),
    ESTES_EXPRESS("Estes Express", Collections.singletonList(EnumCountry.USA)),
    FAST_HORSE_EXPRESS("FAST HORSE EXPRESS", Collections.singletonList(EnumCountry.USA)),
    FORWARD("Forward", Collections.singletonList(EnumCountry.USA)),
    FRONTLINE_FREIGHT("Frontline Freight", Collections.singletonList(EnumCountry.USA)),
    GESWL_EXPRESS("GESWL EXPRESS", Collections.singletonList(EnumCountry.USA)),
    HAILIFY("HAILIFY", Collections.singletonList(EnumCountry.USA)),
    HORIZON_LOGISTICS("HORIZON LOGISTICS HUB", Collections.singletonList(EnumCountry.USA)),
    JP_EXPRESS("JP Express", Collections.singletonList(EnumCountry.USA)),
    MAERSK("Maersk", Collections.singletonList(EnumCountry.USA)),
    MAGNUM_LTL("Magnum LTL", Collections.singletonList(EnumCountry.USA)),
    MEYER_LOGISTICS("Meyer Logistics", Collections.singletonList(EnumCountry.USA)),
    MORAN_TRANSPORTATION("MORAN TRANSPORTATION", Collections.singletonList(EnumCountry.USA)),
    MOTHERSHIP("Mothership", Collections.singletonList(EnumCountry.USA)),
    MYIB("MyIB", Collections.singletonList(EnumCountry.USA)),
    OAK_HARBOR("Oak Harbor Freight Lines", Collections.singletonList(EnumCountry.USA)),
    OLD_DOMINION("Old Dominion", Collections.singletonList(EnumCountry.USA)),
    PITNEY_BOWES("Pitney Bowes", Collections.singletonList(EnumCountry.USA)),
    PITT_OHIO("Pitt Ohio", Collections.singletonList(EnumCountry.USA)),
    R_L_CARRIERS("R+L Carriers", Collections.singletonList(EnumCountry.USA)),
    RIST_TRANSPORT("RIST Transport", Collections.singletonList(EnumCountry.USA)),
    ROADRUNNER_FREIGHT("Roadrunner Freight", Collections.singletonList(EnumCountry.USA)),
    SAIA("SAIA", Collections.singletonList(EnumCountry.USA)),
    SEKO("SEKO", Collections.singletonList(EnumCountry.USA)),
    SONIC("Sonic", Collections.singletonList(EnumCountry.USA)),
    SOUTH_EASTERN_FREIGHT("South Eastern Freight Lines(SEFL)", Collections.singletonList(EnumCountry.USA)),
    SOUTHWESTERN_MOTOR("Southwestern Motor Transport", Collections.singletonList(EnumCountry.USA)),
    SPEE_DEE_DELIVERY("Spee-Dee Delivery Services", Collections.singletonList(EnumCountry.USA)),
    SWISHIP("Swiship", Collections.singletonList(EnumCountry.USA)),
    TAX_AIRFREIGHT("TAX Airfreight Inc", Collections.singletonList(EnumCountry.USA)),
    TFORCE_FREIGHT("TForce Freight (UPS Freight)", Collections.singletonList(EnumCountry.USA)),
    TFWW("TFWW", Collections.singletonList(EnumCountry.USA)),
    TOO_EXPRESS("Too Express", Collections.singletonList(EnumCountry.USA)),
    TOTAL_TRANSPORTATION("Total Transportation & Distribution", Collections.singletonList(EnumCountry.USA)),
    TQL("TQL", Collections.singletonList(EnumCountry.USA)),
    VEHO("Veho", Collections.singletonList(EnumCountry.USA)),
    WALMART_WFS("Walmart WFS", Collections.singletonList(EnumCountry.USA)),
    WARD_TRANSPORT("Ward Transport & Logistics", Collections.singletonList(EnumCountry.USA)),
    WARP("WARP", Collections.singletonList(EnumCountry.USA)),
    WESTERN_POST("Western Post", Collections.singletonList(EnumCountry.USA)),
    XMILES("Xmiles", Collections.singletonList(EnumCountry.USA)),
    XPO("XPO", Collections.singletonList(EnumCountry.USA)),
    ZIPPEX("ZIPPEX", Collections.singletonList(EnumCountry.USA));

    @Schema(description = "物流商名称")
    private final String companyName;

    @Schema(description = "支持国家列表")
    private transient final List<EnumCountry> supportedCountries;

    @Override
    public String getLabel() {
        return companyName;
    }

    public static final Map<String, EnumLogisticsCompany> COMPANY_NAME_MAP = Arrays.stream(values()).collect(Collectors.toMap(EnumLogisticsCompany::getCompanyName, o -> o));
}
